]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
windowPreview: Allow to disable overlay
authorFlorian Müllner <fmuellner@gnome.org>
Fri, 26 Jun 2020 15:01:31 +0000 (17:01 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Mon, 6 Jul 2020 22:06:49 +0000 (00:06 +0200)
WindowPreviews now contain and manage overlaid elements like close
button or title label themselves. That's generally better, but right now
the only way to disable those overlays (for example during transitions)
is to prevent any hover or focus events from getting to the preview.

Instead, add some explicit API for enabling or disabling overlay support.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1345

js/ui/windowPreview.js

index caa0732648d2098eb2789874ab88539ca08682e7..c5510e4c1a782034ed058a143ea2960f0e0a30cf 100644 (file)
@@ -189,6 +189,12 @@ var WindowPreviewLayout = GObject.registerClass({
 });
 
 var WindowPreview = GObject.registerClass({
+    Properties: {
+        'overlay-enabled': GObject.ParamSpec.boolean(
+            'overlay-enabled', 'overlay-enabled', 'overlay-enabled',
+            GObject.ParamFlags.READWRITE,
+            true),
+    },
     Signals: {
         'drag-begin': {},
         'drag-cancelled': {},
@@ -255,6 +261,7 @@ var WindowPreview = GObject.registerClass({
         this.inDrag = false;
 
         this._selected = false;
+        this._overlayEnabled = true;
         this._closeRequested = false;
         this._idleHideOverlayId = 0;
 
@@ -434,6 +441,9 @@ var WindowPreview = GObject.registerClass({
     }
 
     showOverlay(animate) {
+        if (!this._overlayEnabled)
+            return;
+
         const ongoingTransition = this._border.get_transition('opacity');
 
         // Don't do anything if we're fully visible already
@@ -569,6 +579,25 @@ var WindowPreview = GObject.registerClass({
         });
     }
 
+    // eslint-disable-next-line camelcase
+    get overlay_enabled() {
+        return this._overlayEnabled;
+    }
+
+    // eslint-disable-next-line camelcase
+    set overlay_enabled(enabled) {
+        if (this._overlayEnabled === enabled)
+            return;
+
+        this._overlayEnabled = enabled;
+        this.notify('overlay-enabled');
+
+        if (!enabled)
+            this.hideOverlay(false);
+        else if (this['has-pointer'] || global.stage.key_focus === this)
+            this.showOverlay(true);
+    }
+
     // Find the actor just below us, respecting reparenting done by DND code
     _getActualStackAbove() {
         if (this._stackAbove == null)